package sf.database.annotations;


import sf.database.jdbc.type.NullType;
import sf.database.jdbc.type.TypeHandler;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;


/**
 * 扩展数据类型的注解，可用于支持新的数据映射方式
 * @author
 */
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Type {
    /**
     * 自定义的java和数据库类型映射实现
     * @return
     */
    @SuppressWarnings("rawtypes")
    Class<? extends TypeHandler> value() default NullType.class;

    /**
     * 请查看{@link java.sql.Types}
     * @return
     */
    int sqlType() default 0;

    /**
     * 数据库字段对应的java类型
     * @return
     */
    Class<?> javaType() default void.class;

    /**
     * Any configuration parameters for the named type.
     */
    Parameter[] parameters() default {};

    /**
     * 转换类型,该注解主要是解决当type和jpa的@Convert,AttributeConverter共用时产生的问题.<br>
     * 为true时,@Convert嵌入@type中.主要解决jdbc和r2dbc混合使用的问题
     */
    boolean mix() default true;
}
